iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
自我挑戰組

先報名再說系列 第 5

Day 05 - 通過 Python 調用命令

  • 分享至 

  • xImage
  •  

有了 Web 框架後現在要通過 Python 調用 PowerShell 命令,通過以下指令

powershell -Help

https://ithelp.ithome.com.tw/upload/images/20220916/20130568x7jOvaiHvz.png

其中可以通過 -Command 參數可以指定執行 PowerShell 命令且可以攜帶參數

powershell -Command Get-ComputerInfo

https://ithelp.ithome.com.tw/upload/images/20220916/20130568XixUmZ8WEI.png

可以看到成功執行獲取到當前設備的基本資訊,但有紅色訊息需要查看當前的 Execution Policies

Get-ExecutionPolicy -List

https://ithelp.ithome.com.tw/upload/images/20220916/20130568OhNodKm5J1.png

將 ExecutionPolicy 修改為 RemoteSigned 即可執行本機命令但從網路下載的命令將會受到限制

Set-ExecutionPolicy RemoteSigned

查看當前的 Execution Policies 是否已經修改

https://ithelp.ithome.com.tw/upload/images/20220916/2013056894N8NnhOxz.png

再重新執行命令可以發現紅色訊息已經不見

https://ithelp.ithome.com.tw/upload/images/20220916/20130568HQCroQdF1c.png

最後將此命令通過 Python 進行執行,引入 subprocess 模塊

import subprocess

程式進入點

if __name__ == '__main__':

宣告要執行的命令這裡為輸出 Hello Wolrd! 訊息

command = "powershell -Command Get-ComputerInfo"

執行命令並返回執行狀態

ret = subprocess.run(command)

輸出執行結果,0 代表已經執行完畢,若為負值則表示命令中斷

if ret.returncode < 0:
        print("error:",ret)  
    else: 
        print("success:",ret)

完整程式碼如下

import subprocess

if __name__ == '__main__':

    command = "powershell -Command Write-Host 'Hello Wolrd!'"
    ret = subprocess.run(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8")
    if ret.returncode < 0:
        print("error:",ret)  
    else: 
        print("success:",ret)

執行

python ps.py

輸出結果

success: CompletedProcess(args="powershell -Command Write-Host 'Hello Wolrd!'", returncode=0, stdout='Hello Wolrd!\n', stderr='')

參考資源

Set-ExecutionPolicy

subprocess --- 子进程管理

Executing PowerShell from Python


上一篇
Day 04 - Web 框架
下一篇
Day 06 - API
系列文
先報名再說6
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言